#ifndef ANDRES_OUTPUT_OUTPUT_H
#define ANDRES_OUTPUT_OUTPUT_H

#include <kalman_filter/particle_filter.h>
#include <opencv2/opencv.hpp>
#include <base/defines.h>
#include <base/common.h>
#include <base/camera.h>
#include <string>

class DbgFrame
{
public:
    DbgFrame()
    {}
    virtual ~DbgFrame()
    {}
    virtual void DrawTrcPoints(const std::vector<GeoPoint>& gps_points, const cv::Scalar& color) = 0;
    virtual void PrintIntoImg(const std::string& filename) = 0;
    virtual void DrawHDmapProjectView(const hdmap_frame& hdmap_f, const Pose& pose, const cv::Scalar& color) = 0;
    virtual void DrawParticles(Filtering::ParticleFilter* pf) = 0;
    virtual void DrawSolidLine3D(const std::vector<Eigen::Vector3d>& spline, const cv::Scalar& color, int line_width) = 0;
    virtual void DrawSolidLine2D(const std::vector<Eigen::Vector2d>& spline, const cv::Scalar& color, int line_width) = 0;
    virtual void DrawRound2D(const Eigen::Vector2d& center, const cv::Scalar& color, double radius) = 0;
    virtual void DrawRectangle2D(const envelope2D& env, const cv::Scalar& color, double line_width = 2.0) = 0;
    virtual void DrawHorizontial(const GeoPoint& gps_point,const std::vector<hdmap_lane> &hdlanes) = 0;
    virtual void DrawDlFrame2D(const DlFrame& dlFrame, const cv::Scalar& color) = 0;
    virtual cv::Mat GetTopMat() const = 0;
    virtual cv::Mat GetBottomMat() const = 0;
};


#endif